import config from '@/common/config'
import {cacheKey, commonConstant} from '@/common/constant.js';

export function checkUpdate(){
	// 获取本地应用资源版本号
	plus.runtime.getProperty(plus.runtime.appid, (inf) => {
		let param =  {
			dcAppId: plus.runtime.appid,
			bundleId: getBundleId(),
			platform: uni.getSystemInfoSync().platform,
			appVersionNumber: plus.runtime.version,
			appVersionName: plus.runtime.versionCode,
			wgetVersionNumber: inf.versionCode,
			wgetVersionName: inf.version
		};
		console.info('请求参数：' + JSON.stringify(param));
		debugger
		const authToken = uni.getStorageSync(cacheKey.TOKEN) || "";
		const pluginUrl = config.baseUrl + '/faas-hub-addons';
		console.info('请求地址：' + pluginUrl);
		uni.request({
			url: `${pluginUrl}/app/upgrade/info`,
			method:"POST",
			dataType:'json',
			data:param,
			header:{
			  "content-type":"application/json",
			  "lesseeId":config.lesseeId,
			  "Authorization":`Bearer ${authToken}`
			},
			success: (res) => {
				console.info('响应：' + JSON.stringify(res));
				console.info(res.data.code);
				if (res.data.code === 0){
					console.info('当前版本：' + inf.versionCode);
					console.info('服务器版本：' + res.data.versionNumber);
					console.info('类型：' + res.data.type);
					console.info('静默安装：' + res.data.silenceStatus);
					//判断后台返回版本号是否大于当前应用版本号 && 是否发行 （上架应用市场时一定不能弹出更新提示）
					if (Number(res.data.data.versionNumber) > Number(inf.versionCode) && res.data.data.issuedStatus == 1) {
						//如果是wgt升级，并且是静默更新 （注意！！！ 如果是手动检查新版本，就不用判断静默更新，请直接跳转更新页，不然点击检查新版本后会没反应）
						if (res.data.data.type == 0 && res.data.data.silenceStatus == 1) {
							console.info('热更新...下载资源');
							//调用静默更新方法 传入下载地址
							this.upgrade(res.data.data.downloadUrl)
						} else {
							//跳转更新页面 （注意！！！如果pages.json第一页的代码里有一打开就跳转其他页面的操作，下面这行代码最好写在setTimeout里面设置延时3到5秒再执行）
							let data = JSON.stringify(res.data.data);
							console.info('跳转页面...');
							uni.navigateTo({
								url: '/pages/common/upgrade/upgrade?param=' + encodeURIComponent(data)
							});	
						}
					} else {
						// 如果是手动检查新版本 需开启以下注释
						/* uni.showModal({
							title: '提示',
							content: '已是最新版本',
							showCancel: false
						}) */
					}
				}
			},
			fail: (err) => {
				uni.getNetworkType({
					complete: res => {
						let networkType = res.networkType || 'none';
						if (networkType === 'none') {
							uni.showToast({
							  title: '当前无网络,请检查您的网络连接',
							  icon: 'none',
							  duration: 4000
							});
						} else {
							console.err('err:', err)
							uni.showToast({
							  title: '未知错误',
							  icon: 'none',
							  duration: 4000
							});
						}
					}
				});
			}
		})
	});
}

export function upgrade(url) {
	uni.downloadFile({
		url,
		success: res => {
			if (res.statusCode === 200) {
				plus.runtime.install(
					res.tempFilePath, {
						force: true //true表示强制安装，不进行版本号的校验；false则需要版本号校验，
					},
					function() {
						uni.showModal({
							title: '更新提示',
							content: '新版本已经准备好，请重启应用',
							showCancel: false,
							success: function(res) {
								if (res.confirm) {
									// console.log('用户点击确定');
									plus.runtime.restart()
								}
							}
						});
						// console.log('install success...');
					},
					function(e) {
						console.error('install fail...');
						console.error('热更新失败', e);
						uni.hideToast();
						installFail();
					}
				);
			}
		}
	});
}

export function restart() {
	// #ifdef APP-PLUS
	if (plus.os.name.toLowerCase() === 'android') {
		plus.runtime.quit();
	} else {
		const threadClass = plus.ios.importClass("NSThread");
		const mainThread = plus.ios.invoke(threadClass, "mainThread");
		plus.ios.invoke(mainThread, "exit");
	}
	// #endif
}


export function getBundleId(){
	let packageName = null;
	// 判断系统类型  
	if (plus.os.name === 'Android') {  
	  // 获取安卓应用包名  
	  packageName = plus.android.runtimeMainActivity().getPackageName()  
	} else {  
	  // 获取苹果应用包名（bundleId）  
	  packageName = plus.ios.importClass('NSBundle').mainBundle().bundleIdentifier()  
	}
	return packageName;
}

export function installFail() {
  uni.showModal({
	title: '温馨提醒',
	content: '请问是否出现安装包损坏或其他原因导致无法正常安装新版本的情况?请前往浏览器下载最新版本手动安装',
	confirmText: '立刻前往',
	success: res => {
	  if (res.confirm) {
		plus.runtime.openURL(`https://ed2bb32b-5553-4785-9bec-047aef8f37f3.bspapp.com/http/app?id=${this.id}`, () => {
		  this.openUrlFail();
		});
	  }
	}
  });
}

export function openUrlFail() {
  uni.showModal({
	content: '打开浏览器失败,请复制下载地址,手动打开手机浏览器输入地址下载',
	confirmText: '复制',
	success: res => {
	  if (res.confirm) {
		uni.setClipboardData({
		  data: `https://ed2bb32b-5553-4785-9bec-047aef8f37f3.bspapp.com/http/app?id=${this.id}`,
		  success: () => {}
		});
	  }
	}
  });
}